package com.google.code.gronono.gps.pattern;

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;

import com.google.code.gronono.commons.io.file.jpeg.JpegFile;

/**
 * Permet d'appliquer un pattern javascript (syntax Mozilla/Rhino).
 */
public class JsPattern {
	/** Clé de variable pour le traitement des fichiers jpeg. */
	private static final String JPEG_FILE_VAR = "jpegFile";

	/** Elément à scripter. */
	private final Scriptable scriptable;
	/** Contexte d'interprétation. */
	private final Context context;
	/** Expression javascript à interpréter. */
	private final String jsExpression;

	/**
	 * Constructeur.
	 * @param jsExpression Expression javascript à interpréter.
	 */
	public JsPattern(final String jsExpression) {
		this.jsExpression = jsExpression;
		context = Context.enter();
		scriptable = context.initStandardObjects();
	}

	/**
	 * Applique un pattern javascript et l'interprète pour fournir un résultat.
	 * @param file Fichier de type {@link JpegFile}.
	 * @return Le résultat d'interprétation.
	 */
	public String applyPattern(final JpegFile file) {
		scriptable.put(JPEG_FILE_VAR, scriptable, file);
		//TODO Pourquoi "toto" ?
		final Object result = context.evaluateString(scriptable, jsExpression, "toto", 0, null);
		return Context.toString(result);
	}

}
